Como evitar el rebote de interruptores directamente en el hardware.
Usaremos lo que se llama un filtro RC, que consiste de una resistencia (R) y un condensador (C)
Podemos tener dos situaciones:
En este circuito el condensador está descargado cuando el pulsador está en reposo.
En este circuito el condensador está cargado cuando el pulsador está en reposo.
En un circuito normal solo tendríamos el pulsador y la resistencia (ya sea pull-up o pull-down), en este circuito a mayores tenemos un condensador (en este caso de 4.7uF) y una resistencia a mayores (en este caso de 425 Ohm).
El funcionamiento del circuito consiste en que el condensador se irá cargando o descargando y esto generará una señal mas estabilizada, la resistencia de 425 Ohm es la que controla con que velocidad se cargará o descargará el condensador al activar el pulsador.
La formula base para hacer los calculos es:
Debounce_time = 5 x Resistencia x Capacitancia
NOTA: el 5 es una constante que nos permite hacer mas grande el tiempo de antirebote para asegurarnos de que el condensador lo absorve.
Elección de parámetros:
Ahora podemos usar la formula para calcular directamete el valor de la resistencia que trabajará con el condensador.
Resistencia = Debounce_time / (5 x Capacitancia)
Si cogemos un condensador de 4.7uF y un tiempo de debounce de 10 ms, el calculo sería: 10 / 5 * 0.0047 lo que nos daría unos 425 Ohm.
NOTA: Al hacer el calculo tanto la capacitancia como el tiempo tienen que estar en la misma medida, como tenemos el tiempo en milisegundos pues pasamos los microfaradios a milifaradios (dividimos entre 1.000), también podemos hacerlo al reves y pasar los milisegundos a microsegundos.
AVR | debounce switch | capacitor